<?php

namespace app\api\controller;


use mangdin\alipaywap\AlipayTradeWapPayContentBuilder;
use think\Config;
use think\Controller;
use think\Request;
use app\api\model\RechargeOrder;
use think\Db;
use think\facade\Log;
use app\model\QRcodes;

class payback extends Controller
{
    private $conf;
    public function __construct()
    {
        include_once \think\facade\Env::get('EXTEND_PATH') . 'alipay/pagepay/service/AlipayTradeService.php';
        include_once \think\facade\Env::get('EXTEND_PATH') . 'alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
    }
    public function index()
    {
        $configs = [
            'title' => true,
            'logo' => true,
            'logo_url' => './logo.png',
            'logo_size' => 80,
        ];
        $qr_url = $this->alipay( $_GET['money']);
        $qr_code = new QRcodes($configs);
        $qr_img = $qr_code->createServer($qr_url);
       echo $qr_img;
       exit();
    }
    public function alipay($money)
    {
        $config = config('alipay.');
        $out_trade_no = uniqid();
        //订单名称，必填
        $subject = '流量币';
        //付款金额，必填
        $total_amount = $money;
        //商品描述，可空
        $payRequestBuilder = new \AlipayTradePagePayContentBuilder();
        $payRequestBuilder->setSubject($subject);
        $payRequestBuilder->setTotalAmount($total_amount);
        $payRequestBuilder->setOutTradeNo($out_trade_no);
        $aop = new \AlipayTradeService($config);
        $response = $aop->pagePay($payRequestBuilder, $config['return_url'], $config['notify_url']);
        // 直接输出
        return $response;
    }
    public function notify_url(Request $request)
    {
        $data = $request->param();
        Log::write("异步回调参数");
        Log::write($_POST);
        //获取配置
        $config = config('alipay.');
        $alipaySevice = new \AlipayTradeService($config);
        $result = $alipaySevice->check($data);
        file_put_contents('./logo.txt',$alipaySevice);
        if ($result) {
            if ($config['app_id'] !== $data['app_id']) {
                return "success";
            }
            $order_info = DB::name("recharge_order")->where('order_sn', $data['out_trade_no'])->find();
            if (!$order_info) {
                return "success";
            }
            if ($order_info['pay_state'] == 1) {
                return "success";
            }
        }

    }

    public function return_url(Request $request)
    {
        $arr = $_GET;
        $config = $this->conf;
        $alipaySevice = new \AlipayTradeService($config);
        $result = $alipaySevice->check($arr);
        /* 实际验证过程建议商户添加以下校验。
        1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号，
        2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额），
        3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email）
        4、验证app_id是否为该商户本身。
        */
        if ($result) {//验证成功
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //请在这里加上商户的业务逻辑程序代码
            //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
            //获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表
            //商户订单号
            $out_trade_no = htmlspecialchars($_GET['out_trade_no']);
            //支付宝交易号
            $trade_no = htmlspecialchars($_GET['trade_no']);

            echo "验证成功<br />支付宝交易号：" . $trade_no;

            //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        } else {
            //验证失败
            echo "验证失败";
        }

    }


}
